10 GOTO 50 20 SAVE"@0:STARS.BAS.PR",8 30 VERIFY"0:STARS.BAS.PR",8 40 END 50 PRINT CHR$(147) 60 REM CLEAR SCREEN 70 REM 80 REM STARS.BAS 90 REM BY JAMES A. INGRAM JAN.7, 1981 100 REM ADAPTED FROM CREATIVE COMPUTING, JUNE 1983 ISSUE. 110 REM 120 REM INSTRUCTIONS 130 PRINT CHR$(147) 140 REM CLEAR SCREEN 150 PRINT 160 PRINT 170 PRINT "***TABLE OF VISIBLE SKY OBJECTS***" 180 PRINT "THIS PROGRAM CHECKS THROUGH A MASTER" 190 PRINT"TABLE CONTAINING STARS AND OTHER" 200 PRINT"INTERESTING OBJECTS IN THE NIGHT SKY, AND" 210 PRINT"DETERMINES WHICH ONES ARE VISIBLE" 220 PRINT"AT A SPECIFIC TIME AND DATE. [201]T THEN" 230 PRINT"CALCULATES THE COMPASS BEARING" 240 PRINT"AND ALTITUDE ABOVE THE HORIZON FOR THAT" 250 PRINT"TIME. THE TABLE INCLUDES THE NAME," 260 PRINT"MAGNITUDE, RIGHT ASCENSION, DECLINATION," 270 PRINT"BEARING, AND ALTITUDE. NOTE THAT TIME" 280 PRINT"MUST BE ENTERED IN 24 HOUR FORMAT (2 PM=14:00)" 290 PRINT"AND THAT NUMBERS LESS THAN 10 MUST BE ENTERED" 300 PRINT"AS 2 DIGITS WITH A LEADING ZERO (05)." 310 PRINT"BEARINGS: 0 IS NORTH, EAST IS 90" 320 PRINT" 180 IS SOUTH, 270 IS WEST" 330 PRINT"CHANGE LINES 360 TO 460 FOR YOUR OWN LONGITUDE, LATITUDE, AND ZONE." 340 PRINT 350 REM 360 REM INITIALIZE CONSTANTS 370 LNG=360-79.25 380 REM SCARBOROUGH, ONTARIO, CANADA 390 LAT=43.75 400 REM SOUTH END OF BOROUGH 410 GX=19 420 REM EASTERN STANDARD TIME 430 N=91 440 REM NUMBER OF SKY OBJECTS AVAILABLE 450 REM 460 REM INPUT LOCAL VALUES IN THE FIVE LINES ABOVE 470 INPUT"DATE (AS MM/DD)";D$ 480 INPUT"TIME (24 H CLOCK AS HH/MM)";T$ 490 INPUT"STANDARD TIME (S) OR DAYLIGHT (D)";F$ 500 PRINT"MAXIMUM MAGNITUDE (MIN. BRIGHTNESS) FOR TABLE":INPUTMG 510 REM 520 REM CALCULATE BASIC VALUES 530 REM DECIPHER TIME 540 TH=VAL(LEFT$(T$,2)) 550 REM ZONE HOURS 560 TM=VAL(RIGHT$(T$,2)) 570 REM ZONE MINUTES 580 TZ=TH+TM/60 590 REM DECIMAL ZONE TIME 600 IF F$="D" THEN GX=GX+1 :REM CORRECT FOR DAYLIGHT SAVING TIME 610 GT=TZ-GX 620 REM UNCORRECTED DECIMAL GMT 630 IF GT<0 THEN GT=GT+24 640 IF GT<24 THEN 670 650 GT=GT-24 660 GOTO 640 670 TL=GT+(LNG/360)*24 680 REM UNCORRECTED LOCAL STAR TIME 690 IF TL<24 THEN 720 700 TL=TL-24 710 GOTO 690 720 TL$=STR$(INT(TL))+":"+STR$(INT((TL-INT(TL))*60)) 730 REM STAR TIME STRING 740 GT$=STR$(INT(GT))+":"+STR$(INT((GT-INT(GT))*60)) 750 REM GMT STRING 760 REM 770 REM CALCULATE DAYS FROM SEPTEMBER 22 780 M=VAL(LEFT$(D$,2)) 790 REM MONTH 800 DY=VAL(RIGHT$(D$,2)) 810 REM DAY 820 IF DY=22 AND M=9 THEN CD=0: GOTO 1020 830 IF DY>22 AND M=9 THEN CD=DY-22 :GOTO 1020 840 IF M=10 THEN CD=8+DY :GOTO 1020 850 IF M<9 OR (M=9 AND DY<22) THEN M=M+12 :GOTO 890 860 IF M>10 THEN 890 870 PRINT"IMPROPER DATE - RE-ENTER" 880 GOTO 470 890 R=M-10 900 CD=8 910 DIM D3(12) 920 FOR PS=1 TO 12 930 READ D3(PS) 940 NEXT PS 950 FOR X=1 TO R 960 REM ADD UP MONTHS 970 CD=CD+D3(X) 980 NEXT X 990 DATA 31,30,31,31,28,31,30,31,30,31,31,30 1000 CD=CD+DY 1010 REM ADD IN DAYS IN CURRENT MONTH 1020 ZLH=CD*24/365+TL 1030 IF ZLH>24 THEN ZLH=ZLH-24 1040 ZLH$=STR$(INT(ZLH))+":"+STR$(INT((ZLH-INT(ZLH))*60)) 1050 REM 1060 REM PRINT TABLE HEADING 1070 INPUT"PRINTER (Y/N)";IN$ :REM PRINTER ON 1080 PN=3 :IF IN$="Y" THEN PN=4 1090 OPENPN,PN 1100 PRINT#PN," CELESTIAL OBJECT AVAILABILITY TABLE" 1110 PRINT#PN 1120 PRINT#PN 1130 PRINT#PN,"DATE ";D$;SPC(30);"DAYS FROM SEPT. 22 =";CD 1140 PRINT#PN,"LOCAL ZONE TIME ";T$;" (GMT = ";GT$;")"; 1150 PRINT#PN, SPC(5);"LOCAL STAR TIME ";TL$ 1160 PRINT#PN,"LATITUDE ";LAT;"DEGREES NORTH"; 1170 PRINT#PN, SPC(12);"LONGITUDE ";LNG;"DEGREES EAST" 1180 PRINT#PN,"OBJECTS BRIGHTER THAN MAGNITUDE";MG; 1190 PRINT#PN, SPC(5);"ZENITH AT ";ZLH$;" HOURS RA" 1200 PRINT#PN 1210 PRINT#PN 1220 PRINT#PN,"OBJECT MAG";SPC(3);"R.A."; 1230 PRINT#PN,SPC(5);"DEC.";SPC(3);"BEARING";SPC(3);"ALTITUDE" 1240 PRINT#PN,"---------------------------------------"; 1250 PRINT#PN,"-------------------------------" 1260 REM 1270 REM MAIN CALCULATION LOOP 1280 LAT=LAT*6.28318/360 1290 LAT=3.14159/2-LAT 1300 FOR J=1 TO N 1310 REM READ DATA TABLE 1320 READ N$,BR,RA$,D 1330 IF BR>MG THEN 174 0:REM BELOW BRIGHTNESS LIMIT? 1340 N$=LEFT$(N$+" ",20) 1350 RA=VAL(LEFT$(RA$,2))+VAL(RIGHT$(RA$,2))/60 1360 ZRA=(RA-ZLH)*15 1370 REM POSITION FROM ZENITH LINE IN DEGREES 1380 IF ZRA>360 THEN ZRA=ZRA-360 1390 IF ZRA<0 THEN ZRA=ZRA+360 1400 ALT=90-D 1410 ZPI=ZRA*6.28318/360 1420 API=ALT*6.28318/360 1430 X=SIN(API)*COS(ZPI) 1440 REM CONVERT TO XYZ COORDINATES 1450 Y=SIN(API)*SIN(ZPI) 1460 Z=COS(API) 1470 X1=X*COS(LAT)-Z*SIN(LAT) 1480 REM ROTATE TO ZENITH 1490 Z1=X*SIN(LAT)+Z*COS(LAT) 1500 X=X1 1510 Z=Z1 1520 REM NOTE: ATN() FUNCTIONS BELOW ARE VALID FROM -PI/2 TO PI/2 ONLY. 1530 REM ALTITUDE IS WITHIN THIS RANGE, BUT BEARING MUST BE TRANSLATED 1540 REM TO COMPASS HEADING WITHIN EACH QUADRANT OF THE X-Y PLANE. 1550 A=ATN(Z/(SQR(X*X+Y*Y)))*(360/6.283) 1560 REM ALTITUDE ABOVE HORIZON 1570 IF A<0 THEN 173 0:REM BELOW HORIZON? 1580 B=ATN(Y/X)*(360/6.283) 1590 REM COMPASS BEARING 1600 IF X>0 AND Y>0 THEN B=180-B :GOTO 164 0:REM SE QUADRANT 1610 IF X>0 AND Y<0 THEN B=180-B :GOTO 164 0: REM SW QUADRANT 1620 IF X<0 AND Y>0 THEN B=-B : GOTO 164 0: REM NE QUADRANT 1630 IF X<0 AND Y<0 THEN B=360-B :GOTO 164 0:REM NW QUADRANT 1640 REM PRINT DATA 1650 BR$=STR$(BR) :BR$=LEFT$(BR$+" ",4) 1660 D$=STR$(D) :D$=LEFT$(D$+" ",5) 1690 PRINT#PN, N$;SPC(3);BR$;SPC(3);RA$;SPC(3);D$; 1692 V1=3 :V2=2 1695 V=B :GOSUB 50000 1700 PRINT#PN, SPC(3);V$; 1705 V=A :GOSUB 50000 1710 PRINT#PN, SPC(6);V$ 1720 REM END OF PRINT ROUTINE 1730 REM END OF BEARING CALCULATION AND PRINT 1740 REM END OF VISIBLE STARS ONLY ROUTINE 1750 NEXT J 1760 REM GET NEXT STAR 1770 CLOSE PN 1780 REM PRINTER OFF 1790 END 1800 REM 1810 REM 1820 REM FOR Q=1 TO 500 :NEXT Q 1830 RETURN 1840 REM FOR Q=1 TO 100 :NEXT Q 1850 RETURN 1860 REM 1870 REM DATA TABLES 1880 DATA SIRIUS (A-CANIS MAJ) , -1.6, 06.43, -16.7 1890 DATA CANOPUS (A-CARINA), -.7,06.23,-52.7 1900 DATA ARCTURUS (A-BOOTES), -.1,14.14,19.4 1910 DATA VEGA (A-LYRA) , 0,18.36,38.8 1920 DATA CAPELLA (A-AURIGA),.1,05.14,46.1 1930 DATA RIGEL (B-ORION),.2,05.13,-8.3 1940 DATA PROCYON (A-CANIS MIN),.4,07.37,5.4 1950 DATA BETELGEUSE (A-ORION),.4,05.54,7.4 1960 DATA ALTAIR (A-AQUILA),.8,19.49,8.8 1970 DATA ALDEBARAN (A-TAURUS),.9,04.34,16.5 1980 DATA ANTARES (A-SCORPIO),1,16.28,-26.3 1990 DATA SPICA (A-VIRGO), 1,13.24,-11 2000 DATA FOMALHAUT (A-PISCIS AUST),1.2,22.56,-29.7 2010 DATA POLLUX (B-GEMINI),1.2,07.43,28.1 2020 DATA DENEB (A-CYGNUS),1.3,20.40,45.2 2030 DATA REGULUS (A-LEO),1.4,10.70,12.1 2040 DATA CASTOR (A-GEMINI),1.6,07.33,32 2050 DATA ADHARA (E-CANIS MAJ),1.6,06.57,-28.9 2060 DATA BELLATRIX (G-ORION),1.6,05.24,6.1 2070 DATA SHAULA (L-SCORPIO),1.6,17.32,-37.1 2080 DATA ELNATH (B-TAURUS),1.7,05.24,28.6 2090 DATA ALNILAM (E-ORION),1.7,05.35,-1.2 2100 DATA MIRFAK (A-PERSEUS),1.8,03.22,49.8 2110 DATA DUBHE (A-URSA MAJ),1.8,11.20,61.9 2120 DATA ALIOTH (E-URSA MAJ),1.8,12.53,56.1 2130 DATA GAMMA VELORUS,1.8,08.90,-47.3 2140 DATA KAUS AUSTRALIS (E-SAGTRS),1.8,18.22,-34.4 2150 DATA ALNITAK (Z-ORION),1.8,05.39,-2 2160 DATA AL NAIR (A-CRUS),1.8,22.60,-47.1 2170 DATA ALKAID (N-URSA MAJ),1.9,13.46,49.5 2180 DATA ALHENA (G-GEMINI),1.9,06.36,16.4 2190 DATA WEZEN (D-CANIS MAJ),1.9,07.70,-26.4 2200 DATA THETA SCORPII,1.9,17.35,-43 2210 DATA MENKALINAN (B-AURIGA),1.9,05.57,45 2220 DATA MIRZAM (B-CANIS MAJ),2,06.21,-17.9 2230 DATA DELTA VELORUM,2,08.44,-51.6 2240 DATA POLARIS (A-URSA MIN),2,02.30,89.1 2250 DATA ALPHARD (A-HYDRA),2,09.26,-8.5 2260 DATA HAMAL (A-ARIES),2,02.50,23.3 2270 DATA DIPHDA (B-CETUS),2,00.42,-18.2 2280 DATA MENKENT (TH-CENTAURI),2,14.50,-36.2 2290 DATA MIRACH (B-ANDROMEDA),2,01.88,35.5 2300 DATA NUNKI (S-SAGGTRS),2.1,18.53,-26.3 2310 DATA RASALHAQUE (A-OPHIUC),2.1,17.34,12.6 2320 DATA ALPHERATZ (A-ANDROM),2.1,00.70,28.9 2330 DATA ALGOL (B-PERSEUS),2.1,03.60,40.8 2340 DATA KOCHAB (B-URSA MIN),2.1,14.51,74.3 2350 DATA ALMACH (G-ANDROM),2.1,02.20,42.2 2360 DATA SAIPH (K-ORION),2.1,05.54,7.1 2370 DATA SCHEDAR (A-CASSIIOPEIA),2.1,00.39,56.4 2380 DATA PSI-PISCES (DBL 300,5.5,01.40,21.2 2390 DATA G-ANDROM. (OR-BL 10),2,02.20,42.2 2400 DATA B-ORION (RIGEL 9),0,05.13,-8.2 2410 DATA TH-ORION (TRAPEZ),5.5,05.34,-5.5 2420 DATA S-ORION (TRI. 11-41),4,05.37,-2.6 2430 DATA A-CANIS MAJ (SIRIUS 10),-1.5,06.44,-16.7 2440 DATA A-GEMINI (CASTOR 75),2,07.32,32 2450 DATA T-CANCER (OR-BL 31),4,08.45,29 2460 DATA G-LEO (DBL 4.5),2.5,10.18,20.2 2470 DATA Z-URSA MAJ (MIZAR 14),2.5,13.23,55.2 2480 DATA E-BOOTES (GD-BL 3),2.5,14.41,27.3 2490 DATA Z-CORONA (DBL 6),5,15.39,36.8 2500 DATA NU-DRACO (DBL 62),5,17.32,55.2 2510 DATA E-LYRA (DBL-DBL 2.7),5,18.44,39.7 2520 DATA B-CYGNI (ALBIREO 34),3,19.30,27.8 2530 DATA G-DELPHIN (YL-GR 10),4.5,20.45,16 2540 DATA NGC869 (PERSEUS GL W),4.5,02.17,57 2550 DATA NGC884 (PERSEUS CL E),4.5,02.21,57 2560 DATA NGC1528 (60 ST 25'),6.5,04.14,51.2 2570 DATA NGC 2632 (M11 BEEHIVE),4,08.39,20.1 2580 DATA NGC6523 (M8 LACOON),5,18.20,-24.4 2590 DATA NGC6618 (M17 OMEGA),7,18.19,-16.2 2600 DATA NGC6720 (M57 RING),9,18.53,33 2610 DATA NGC6853 (M27 DUMBL),7.5,19.59,22.6 2620 DATA NGC5139 (OMEGA GLOB),4,13.25,-47.4 2630 DATA NGC6205 (M13 HERC),5.5,16.41,36.5 2640 DATA NGC6656 (M22 SAGTR),6,18.35,-23.9 2650 DATA NGC1952 (M1 CRAB),8.5,05.33,22 2660 DATA ORION NEB (M12),4,05.33,-5 2670 DATA ANDROM GALAXY (M31),4.8,00.40,41 2680 DATA CANES CLUSTER (M3),6.3,13.40,29 2690 DATA WHIRLPOOL GALAXY (M51),8.1,13.28,47 2700 DATA CYGNUS CLUST (M39),5.2,21.30,48 2710 DATA OPHIUC CLUST (M10),6.7,16.55,-4 2720 DATA OHPIUC CLUSTER (M12), 6.6,16.45,-2 2730 DATA OPHIUC CLUSTER (M14),5.7,17.35,-3 2740 DATA PERSEUS SNGL CLSTR (M34),5.5,02.39,43 2750 DATA AQUARIUS CLSTR (M2),6.3,21.31,-1 2760 DATA GEMINI CLUSTER (M35),5.3,06.60,24 2770 DATA CANIS MAJ OC (M41),4.6,06.45,-21 2780 DATA MONOCEROS OC (M50),6.3,07.10,-8 50000 REM 'PRINT USING', THAT IS, ARRANGE IN COLUMNS. FOR PET/CBM. 50001 REM V1 IS NUMBER OF DIGITS BEFORE THE DECIMAL PLACE, 50002 REM V2 IS THE NUMBER OF DECIMAL PLACES, AND 50003 REM V IS THE NUMBER THAT IS REARRANGED INTO V$ IN THE FORMAT 'V1.V2'. 50004 REM THE CALLING ROUTINE SHOULD SET V1,V2, AND V, THEN GOSUB 50000. 50005 REM ON RETURN, V$ CAN BE PRINTED. 50006 REM V$'S LENGTH WILL BE V1+V2+2, THE EXTRA TWO BYTES BEING FOR 50007 REM THE SIGN AND THE DECIMAL PLACE. IF V2=0, THE LENGTH IS V1+1. 50020 V4=INT(V*10^V2+.5) 50030 V$=RIGHT$(" "+STR$(V4),V1+V2+1):Q$=V$ 50040 IF V2<1 GOTO50080 50050 FORV5=V1+2TOV1+V2+1:IF ASC(MID$(V$,V5))<48THENNEXTV5 50060 V6=V5-V1-1 50070 V$=MID$(V$,V6,V1+1)+LEFT$(".00000",V6)+MID$(V$,V5) 50080 IF ASC(V$)>47 THEN V$=LEFT$("**********",V1+V2+2+(V2=0)) 50090 RETURN